﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace yule.Model
{
    /// <summary>
    /// 树形接口
    /// 
    /// 主要用于数据库查询设计；不需要进行递归
    /// 
    /// ID      名称      ParentID
    /// A       测试A     /A
    /// B       测试B     /B
    /// A1      测试A1    /A/A1
    /// A2      测试A2    /A/A2
    /// A21     测试A21   /A/A2/A21
    /// 
    /// 查询所有                    select * from xxx where ParentID like '%/%'
    /// 查询A下所有（包括自己）     select * from xxx where ParentID like '%/A%'
    /// 查询A下所有（不包括自己）   select * from xxx where ParentID like '%/A/%'
    /// 
    /// </summary>
    public interface ITree<T> where T : ITree<T>
    {
        /// <summary>
        /// 子集
        /// </summary>
        IList<T> Childs { get; }
        /// <summary>
        /// 上级
        /// </summary>
        T Parent { get; }
        /// <summary>
        /// 本机名称
        /// </summary>
        string Name { get; set; }
        /// <summary>
        /// 完整路径名
        /// </summary>
        string PathName { get; }
        /// <summary>
        /// ID
        /// </summary>
        dynamic Id { get; }
        /// <summary>
        /// 完整路径ID
        /// </summary>
        string PathId { get; }
        /// <summary>
        /// 上级ID
        /// </summary>
        dynamic ParentId { get; set; }
        /// <summary>
        /// 获取层次（若父节点为空 则为0）
        /// </summary>
        int Level { get; }
        

    }

}